package 简单.模拟;

/**
 * 给你一个大小为 rows x cols 的矩阵 mat，其中 mat[i][j] 是 0 或 1，请返回 矩阵 mat 中特殊位置的数目 。
 * 特殊位置 定义：如果 mat[i][j] == 1 并且第 i 行和第 j 列中的所有其他元素均为 0（行和列的下标均 从
 * 0 开始 ），则位置 (i, j) 被称为特殊位置。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/special-positions-in-a-binary-matrix
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 二进制矩阵中的特殊位置_1582 {

    public static void main(String[] args) {

    }

    /**
     * 模拟+预处理
     *
     * @param mat
     * @return
     */
    public int numSpecial(int[][] mat) {
        int count = 0;
        int[] rows = new int[mat.length];
        int[] cols = new int[mat[0].length];
        for (int row = 0; row < mat.length; row++) {
            for (int col = 0; col < mat[0].length; col++) {
                if (mat[row][col] == 1) {
                    rows[row]++;
                    cols[col]++;
                }
            }
        }
        for (int row = 0; row < mat.length; row++) {
            for (int col = 0; col < mat[0].length; col++) {
                if (mat[row][col] == 1 && rows[row] == 1 && cols[col] == 1) {
                    count++;
                    break;
                }
            }
        }
        return count;
    }

}
